import BigNumber from 'bignumber.js';

// 设置BigNumber默认配置
BigNumber.config({
  DECIMAL_PLACES: 2, // 保留2位小数
  ROUNDING_MODE: BigNumber.ROUND_HALF_UP, // 四舍五入
  EXPONENTIAL_AT: [-15, 20] // 防止科学记数法显示
});

/**
 * 格式化金额，保留2位小数
 * @param {number|string} value - 需要格式化的金额
 * @param {number} decimalPlaces - 小数位数，默认2位
 * @returns {string} - 格式化后的金额字符串
 */
export function formatMoney(value, decimalPlaces = 2) {
  if (value === undefined || value === null) {
    return '0.00';
  }
  
  try {
    return new BigNumber(value).toFixed(decimalPlaces);
  } catch (error) {
    console.error('格式化金额失败:', error);
    return '0.00';
  }
}

/**
 * 加法计算，解决浮点数精度问题
 * @param {number|string} a - 第一个数
 * @param {number|string} b - 第二个数
 * @returns {string} - 计算结果，保留2位小数
 */
export function add(a, b) {
  return new BigNumber(a || 0).plus(new BigNumber(b || 0)).toFixed(2);
}

/**
 * 减法计算，解决浮点数精度问题
 * @param {number|string} a - 被减数
 * @param {number|string} b - 减数
 * @returns {string} - 计算结果，保留2位小数
 */
export function subtract(a, b) {
  return new BigNumber(a || 0).minus(new BigNumber(b || 0)).toFixed(2);
}

/**
 * 乘法计算，解决浮点数精度问题
 * @param {number|string} a - 第一个因数
 * @param {number|string} b - 第二个因数
 * @returns {string} - 计算结果，保留2位小数
 */
export function multiply(a, b) {
  return new BigNumber(a || 0).times(new BigNumber(b || 0)).toFixed(2);
}

/**
 * 除法计算，解决浮点数精度问题
 * @param {number|string} a - 被除数
 * @param {number|string} b - 除数
 * @returns {string} - 计算结果，保留2位小数
 */
export function divide(a, b) {
  if (new BigNumber(b).isZero()) {
    console.error('除数不能为0');
    return '0.00';
  }
  return new BigNumber(a || 0).dividedBy(new BigNumber(b || 0)).toFixed(2);
}

export default {
  formatMoney,
  add,
  subtract,
  multiply,
  divide
}; 